package br.com.sig.financeiro.despesa.presentation.action;

import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.sig.financeiro.despesa.business.model.bo.DespesaBO;
import br.com.sig.financeiro.despesa.business.model.entity.Despesa;
import br.com.sig.financeiro.despesa.business.model.entity.DespesaFixa;
import br.com.sig.financeiro.despesa.business.model.entity.DespesaFlutuante;
import br.com.sig.financeiro.despesa.business.model.enumeration.TipoDeDespesa;
import br.com.sig.presentation.action.BaseAction;

@Named
@ViewScoped
public class DespesaAction extends BaseAction<Despesa> {
	
	private static final long serialVersionUID = 3035631223728635994L;
	
	private TipoDeDespesa tipoDeDespesa;
	
	@Inject
	private DespesaBO despesaBO;

	@PostConstruct
	public void init() {
		setService(despesaBO);
	}
	
	@Override
	protected void clearInstance() {
		super.clearInstance();
		this.tipoDeDespesa = null;
	}
	
	@Override
	public void initInstance() {
		this.tipoDeDespesa = getInstance().getTipo();
	}

	public TipoDeDespesa getTipoDeDespesa() {
		return tipoDeDespesa;
	}

	public void setTipoDeDespesa(TipoDeDespesa tipoDeDespesa) {
		this.tipoDeDespesa = tipoDeDespesa;

		if (!isManaged()) {
			if (TipoDeDespesa.FIXA.equals(this.tipoDeDespesa)) {
				setInstance(new DespesaFixa());
			} else {
				setInstance(new DespesaFlutuante());
			}
		}
	}
}